/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package EA_Model.IEC61970.Generation.Production.impl;

import EA_Model.IEC61970.Core.impl.PowerSystemResourceImpl;

import EA_Model.IEC61970.Domain.ActivePower;
import EA_Model.IEC61970.Domain.Length;
import EA_Model.IEC61970.Domain.Seconds;
import EA_Model.IEC61970.Domain.WaterLevel;

import EA_Model.IEC61970.Generation.Production.HydroPlantType;
import EA_Model.IEC61970.Generation.Production.HydroPowerPlant;
import EA_Model.IEC61970.Generation.Production.PenstockType;
import EA_Model.IEC61970.Generation.Production.ProductionPackage;
import EA_Model.IEC61970.Generation.Production.SurgeTankCode;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Hydro Power Plant</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getDischargeTravelDelay <em>Discharge Travel Delay</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getGenRatedP <em>Gen Rated P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getHydroPlantType <em>Hydro Plant Type</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getPenstockType <em>Penstock Type</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getPlantDischargeCapacity <em>Plant Discharge Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getPlantRatedHead <em>Plant Rated Head</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getPumpRatedP <em>Pump Rated P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getSurgeTankCode <em>Surge Tank Code</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.HydroPowerPlantImpl#getSurgeTankCrestLevel <em>Surge Tank Crest Level</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class HydroPowerPlantImpl extends PowerSystemResourceImpl implements HydroPowerPlant {
	/**
	 * The cached value of the '{@link #getDischargeTravelDelay() <em>Discharge Travel Delay</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDischargeTravelDelay()
	 * @generated
	 * @ordered
	 */
	protected Seconds dischargeTravelDelay;

	/**
	 * The cached value of the '{@link #getGenRatedP() <em>Gen Rated P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getGenRatedP()
	 * @generated
	 * @ordered
	 */
	protected ActivePower genRatedP;

	/**
	 * The default value of the '{@link #getHydroPlantType() <em>Hydro Plant Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHydroPlantType()
	 * @generated
	 * @ordered
	 */
	protected static final HydroPlantType HYDRO_PLANT_TYPE_EDEFAULT = HydroPlantType.RUN_OF_RIVER;

	/**
	 * The cached value of the '{@link #getHydroPlantType() <em>Hydro Plant Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHydroPlantType()
	 * @generated
	 * @ordered
	 */
	protected HydroPlantType hydroPlantType = HYDRO_PLANT_TYPE_EDEFAULT;

	/**
	 * The default value of the '{@link #getPenstockType() <em>Penstock Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPenstockType()
	 * @generated
	 * @ordered
	 */
	protected static final PenstockType PENSTOCK_TYPE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getPenstockType() <em>Penstock Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPenstockType()
	 * @generated
	 * @ordered
	 */
	protected PenstockType penstockType = PENSTOCK_TYPE_EDEFAULT;

	/**
	 * The cached value of the '{@link #getPlantDischargeCapacity() <em>Plant Discharge Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPlantDischargeCapacity()
	 * @generated
	 * @ordered
	 */
	protected EA_Model.IEC61970.Domain.Float plantDischargeCapacity;

	/**
	 * The cached value of the '{@link #getPlantRatedHead() <em>Plant Rated Head</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPlantRatedHead()
	 * @generated
	 * @ordered
	 */
	protected Length plantRatedHead;

	/**
	 * The cached value of the '{@link #getPumpRatedP() <em>Pump Rated P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPumpRatedP()
	 * @generated
	 * @ordered
	 */
	protected ActivePower pumpRatedP;

	/**
	 * The default value of the '{@link #getSurgeTankCode() <em>Surge Tank Code</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSurgeTankCode()
	 * @generated
	 * @ordered
	 */
	protected static final SurgeTankCode SURGE_TANK_CODE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getSurgeTankCode() <em>Surge Tank Code</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSurgeTankCode()
	 * @generated
	 * @ordered
	 */
	protected SurgeTankCode surgeTankCode = SURGE_TANK_CODE_EDEFAULT;

	/**
	 * The cached value of the '{@link #getSurgeTankCrestLevel() <em>Surge Tank Crest Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSurgeTankCrestLevel()
	 * @generated
	 * @ordered
	 */
	protected WaterLevel surgeTankCrestLevel;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected HydroPowerPlantImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ProductionPackage.Literals.HYDRO_POWER_PLANT;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds getDischargeTravelDelay() {
		if (dischargeTravelDelay != null && dischargeTravelDelay.eIsProxy()) {
			InternalEObject oldDischargeTravelDelay = (InternalEObject)dischargeTravelDelay;
			dischargeTravelDelay = (Seconds)eResolveProxy(oldDischargeTravelDelay);
			if (dischargeTravelDelay != oldDischargeTravelDelay) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY, oldDischargeTravelDelay, dischargeTravelDelay));
			}
		}
		return dischargeTravelDelay;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds basicGetDischargeTravelDelay() {
		return dischargeTravelDelay;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDischargeTravelDelay(Seconds newDischargeTravelDelay) {
		Seconds oldDischargeTravelDelay = dischargeTravelDelay;
		dischargeTravelDelay = newDischargeTravelDelay;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY, oldDischargeTravelDelay, dischargeTravelDelay));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower getGenRatedP() {
		if (genRatedP != null && genRatedP.eIsProxy()) {
			InternalEObject oldGenRatedP = (InternalEObject)genRatedP;
			genRatedP = (ActivePower)eResolveProxy(oldGenRatedP);
			if (genRatedP != oldGenRatedP) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P, oldGenRatedP, genRatedP));
			}
		}
		return genRatedP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower basicGetGenRatedP() {
		return genRatedP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setGenRatedP(ActivePower newGenRatedP) {
		ActivePower oldGenRatedP = genRatedP;
		genRatedP = newGenRatedP;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P, oldGenRatedP, genRatedP));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public HydroPlantType getHydroPlantType() {
		return hydroPlantType;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHydroPlantType(HydroPlantType newHydroPlantType) {
		HydroPlantType oldHydroPlantType = hydroPlantType;
		hydroPlantType = newHydroPlantType == null ? HYDRO_PLANT_TYPE_EDEFAULT : newHydroPlantType;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__HYDRO_PLANT_TYPE, oldHydroPlantType, hydroPlantType));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PenstockType getPenstockType() {
		return penstockType;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPenstockType(PenstockType newPenstockType) {
		PenstockType oldPenstockType = penstockType;
		penstockType = newPenstockType == null ? PENSTOCK_TYPE_EDEFAULT : newPenstockType;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__PENSTOCK_TYPE, oldPenstockType, penstockType));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float getPlantDischargeCapacity() {
		if (plantDischargeCapacity != null && plantDischargeCapacity.eIsProxy()) {
			InternalEObject oldPlantDischargeCapacity = (InternalEObject)plantDischargeCapacity;
			plantDischargeCapacity = (EA_Model.IEC61970.Domain.Float)eResolveProxy(oldPlantDischargeCapacity);
			if (plantDischargeCapacity != oldPlantDischargeCapacity) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY, oldPlantDischargeCapacity, plantDischargeCapacity));
			}
		}
		return plantDischargeCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float basicGetPlantDischargeCapacity() {
		return plantDischargeCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPlantDischargeCapacity(EA_Model.IEC61970.Domain.Float newPlantDischargeCapacity) {
		EA_Model.IEC61970.Domain.Float oldPlantDischargeCapacity = plantDischargeCapacity;
		plantDischargeCapacity = newPlantDischargeCapacity;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY, oldPlantDischargeCapacity, plantDischargeCapacity));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Length getPlantRatedHead() {
		if (plantRatedHead != null && plantRatedHead.eIsProxy()) {
			InternalEObject oldPlantRatedHead = (InternalEObject)plantRatedHead;
			plantRatedHead = (Length)eResolveProxy(oldPlantRatedHead);
			if (plantRatedHead != oldPlantRatedHead) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD, oldPlantRatedHead, plantRatedHead));
			}
		}
		return plantRatedHead;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Length basicGetPlantRatedHead() {
		return plantRatedHead;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPlantRatedHead(Length newPlantRatedHead) {
		Length oldPlantRatedHead = plantRatedHead;
		plantRatedHead = newPlantRatedHead;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD, oldPlantRatedHead, plantRatedHead));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower getPumpRatedP() {
		if (pumpRatedP != null && pumpRatedP.eIsProxy()) {
			InternalEObject oldPumpRatedP = (InternalEObject)pumpRatedP;
			pumpRatedP = (ActivePower)eResolveProxy(oldPumpRatedP);
			if (pumpRatedP != oldPumpRatedP) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P, oldPumpRatedP, pumpRatedP));
			}
		}
		return pumpRatedP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower basicGetPumpRatedP() {
		return pumpRatedP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPumpRatedP(ActivePower newPumpRatedP) {
		ActivePower oldPumpRatedP = pumpRatedP;
		pumpRatedP = newPumpRatedP;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P, oldPumpRatedP, pumpRatedP));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public SurgeTankCode getSurgeTankCode() {
		return surgeTankCode;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSurgeTankCode(SurgeTankCode newSurgeTankCode) {
		SurgeTankCode oldSurgeTankCode = surgeTankCode;
		surgeTankCode = newSurgeTankCode == null ? SURGE_TANK_CODE_EDEFAULT : newSurgeTankCode;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CODE, oldSurgeTankCode, surgeTankCode));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel getSurgeTankCrestLevel() {
		if (surgeTankCrestLevel != null && surgeTankCrestLevel.eIsProxy()) {
			InternalEObject oldSurgeTankCrestLevel = (InternalEObject)surgeTankCrestLevel;
			surgeTankCrestLevel = (WaterLevel)eResolveProxy(oldSurgeTankCrestLevel);
			if (surgeTankCrestLevel != oldSurgeTankCrestLevel) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL, oldSurgeTankCrestLevel, surgeTankCrestLevel));
			}
		}
		return surgeTankCrestLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel basicGetSurgeTankCrestLevel() {
		return surgeTankCrestLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSurgeTankCrestLevel(WaterLevel newSurgeTankCrestLevel) {
		WaterLevel oldSurgeTankCrestLevel = surgeTankCrestLevel;
		surgeTankCrestLevel = newSurgeTankCrestLevel;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL, oldSurgeTankCrestLevel, surgeTankCrestLevel));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY:
				if (resolve) return getDischargeTravelDelay();
				return basicGetDischargeTravelDelay();
			case ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P:
				if (resolve) return getGenRatedP();
				return basicGetGenRatedP();
			case ProductionPackage.HYDRO_POWER_PLANT__HYDRO_PLANT_TYPE:
				return getHydroPlantType();
			case ProductionPackage.HYDRO_POWER_PLANT__PENSTOCK_TYPE:
				return getPenstockType();
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY:
				if (resolve) return getPlantDischargeCapacity();
				return basicGetPlantDischargeCapacity();
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD:
				if (resolve) return getPlantRatedHead();
				return basicGetPlantRatedHead();
			case ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P:
				if (resolve) return getPumpRatedP();
				return basicGetPumpRatedP();
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CODE:
				return getSurgeTankCode();
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL:
				if (resolve) return getSurgeTankCrestLevel();
				return basicGetSurgeTankCrestLevel();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY:
				setDischargeTravelDelay((Seconds)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P:
				setGenRatedP((ActivePower)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__HYDRO_PLANT_TYPE:
				setHydroPlantType((HydroPlantType)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PENSTOCK_TYPE:
				setPenstockType((PenstockType)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY:
				setPlantDischargeCapacity((EA_Model.IEC61970.Domain.Float)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD:
				setPlantRatedHead((Length)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P:
				setPumpRatedP((ActivePower)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CODE:
				setSurgeTankCode((SurgeTankCode)newValue);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL:
				setSurgeTankCrestLevel((WaterLevel)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY:
				setDischargeTravelDelay((Seconds)null);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P:
				setGenRatedP((ActivePower)null);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__HYDRO_PLANT_TYPE:
				setHydroPlantType(HYDRO_PLANT_TYPE_EDEFAULT);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PENSTOCK_TYPE:
				setPenstockType(PENSTOCK_TYPE_EDEFAULT);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY:
				setPlantDischargeCapacity((EA_Model.IEC61970.Domain.Float)null);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD:
				setPlantRatedHead((Length)null);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P:
				setPumpRatedP((ActivePower)null);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CODE:
				setSurgeTankCode(SURGE_TANK_CODE_EDEFAULT);
				return;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL:
				setSurgeTankCrestLevel((WaterLevel)null);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case ProductionPackage.HYDRO_POWER_PLANT__DISCHARGE_TRAVEL_DELAY:
				return dischargeTravelDelay != null;
			case ProductionPackage.HYDRO_POWER_PLANT__GEN_RATED_P:
				return genRatedP != null;
			case ProductionPackage.HYDRO_POWER_PLANT__HYDRO_PLANT_TYPE:
				return hydroPlantType != HYDRO_PLANT_TYPE_EDEFAULT;
			case ProductionPackage.HYDRO_POWER_PLANT__PENSTOCK_TYPE:
				return penstockType != PENSTOCK_TYPE_EDEFAULT;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_DISCHARGE_CAPACITY:
				return plantDischargeCapacity != null;
			case ProductionPackage.HYDRO_POWER_PLANT__PLANT_RATED_HEAD:
				return plantRatedHead != null;
			case ProductionPackage.HYDRO_POWER_PLANT__PUMP_RATED_P:
				return pumpRatedP != null;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CODE:
				return surgeTankCode != SURGE_TANK_CODE_EDEFAULT;
			case ProductionPackage.HYDRO_POWER_PLANT__SURGE_TANK_CREST_LEVEL:
				return surgeTankCrestLevel != null;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (hydroPlantType: ");
		result.append(hydroPlantType);
		result.append(", penstockType: ");
		result.append(penstockType);
		result.append(", surgeTankCode: ");
		result.append(surgeTankCode);
		result.append(')');
		return result.toString();
	}

} //HydroPowerPlantImpl
